Micron Document
🎖️GitЯра🎖️

Node / meshtastic / Meshtastic-Android / files / desktop / src / main / kotlin / org / meshtastic / desktop / di / DesktopPlatformModule.kt

Displaying Raw • Download

desktop/src/main/kotlin/org/meshtastic/desktop/di/DesktopPlatformModule.kt 9acdf5309f8f0ab96b30d6505bdac5e93a3bb72c (9acdf530) Text, 9.29 KB

T8b949e/*
* Copyright (c) 2025-2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.desktop.di

Tff7b72import T7ee787androidx.datastore.core.DataStore
Tff7b72import T7ee787androidx.datastore.core.DataStoreFactory
Tff7b72import T7ee787androidx.datastore.core.handlers.ReplaceFileCorruptionHandler
Tff7b72import T7ee787androidx.datastore.core.okio.OkioStorage
Tff7b72import T7ee787androidx.datastore.preferences.core.PreferenceDataStoreFactory
Tff7b72import T7ee787androidx.datastore.preferences.core.Preferences
Tff7b72import T7ee787androidx.datastore.preferences.core.emptyPreferences
Tff7b72import T7ee787androidx.lifecycle.Lifecycle
Tff7b72import T7ee787androidx.lifecycle.LifecycleOwner
Tff7b72import T7ee787androidx.lifecycle.LifecycleRegistry
Tff7b72import T7ee787kotlinx.coroutines.CoroutineScope
Tff7b72import T7ee787kotlinx.coroutines.SupervisorJob
Tff7b72import T7ee787okio.FileSystem
Tff7b72import T7ee787okio.Path.Companion.toPath
Tff7b72import T7ee787org.koin.core.qualifier.named
Tff7b72import T7ee787org.koin.dsl.module
Tff7b72import T7ee787org.meshtastic.core.common.BuildConfigProvider
Tff7b72import T7ee787org.meshtastic.core.database.desktopDataDir
Tff7b72import T7ee787org.meshtastic.core.datastore.di.DATASTORE_SCOPE
Tff7b72import T7ee787org.meshtastic.core.datastore.serializer.ChannelSetSerializer
Tff7b72import T7ee787org.meshtastic.core.datastore.serializer.LocalConfigSerializer
Tff7b72import T7ee787org.meshtastic.core.datastore.serializer.LocalStatsSerializer
Tff7b72import T7ee787org.meshtastic.core.datastore.serializer.ModuleConfigSerializer
Tff7b72import T7ee787org.meshtastic.core.di.CoroutineDispatchers
Tff7b72import T7ee787org.meshtastic.desktop.DesktopBuildConfig
Tff7b72import T7ee787org.meshtastic.proto.ChannelSet
Tff7b72import T7ee787org.meshtastic.proto.LocalConfig
Tff7b72import T7ee787org.meshtastic.proto.LocalModuleConfig
Tff7b72import T7ee787org.meshtastic.proto.LocalStats

T8b949e/** Creates a file-backed [DataStore]<[Preferences]> at the given path under the data directory. */
Tff7b72private Tff7b72fun Td2a8ffcreatePreferencesDataStoreTb4b4b4(Te6edf3nameTb4b4b4: Tffa657StringTb4b4b4, Te6edf3scopeTb4b4b4: Te6edf3CoroutineScopeTb4b4b4)Tb4b4b4: Te6edf3DataStoreTff7b72<Te6edf3PreferencesTff7b72> Tb4b4b4{
Tff7b72val Te6edf3dir Tff7b72= Te6edf3desktopDataDirTb4b4b4(Tb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff/datastoreTa5d6ff"
Te6edf3FileSystemTb4b4b4.Te6edf3SYSTEMTb4b4b4.Te6edf3createDirectoriesTb4b4b4(Te6edf3dirTb4b4b4.Te6edf3toPathTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3PreferenceDataStoreFactoryTb4b4b4.Te6edf3createWithPathTb4b4b4(
Te6edf3corruptionHandler Tff7b72= Te6edf3ReplaceFileCorruptionHandlerTb4b4b4(Te6edf3produceNewData Tff7b72= Tb4b4b4{ Te6edf3emptyPreferencesTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3scope Tff7b72= Te6edf3scopeTb4b4b4,
Te6edf3produceFile Tff7b72= Tb4b4b4{ Ta5d6ff"Tffd700$Te6edf3dirTa5d6ff/Tffd700$Te6edf3nameTa5d6ff.preferences_pbTa5d6ff"Tb4b4b4.Te6edf3toPathTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

T8b949e/**
* Synthetic [LifecycleOwner] that stays permanently in [Lifecycle.State.RESUMED]. Replaces Android's
* `ProcessLifecycleOwner` for desktop.
*/
Tff7b72private Tff7b72class T56d364DesktopProcessLifecycleOwner Tb4b4b4: Te6edf3LifecycleOwner Tb4b4b4{
Tff7b72private Tff7b72val Te6edf3registry Tff7b72= Te6edf3LifecycleRegistryTb4b4b4(Tff7b72thisTb4b4b4)

Tff7b72init Tb4b4b4{
Te6edf3registryTb4b4b4.Te6edf3currentState Tff7b72= Te6edf3LifecycleTb4b4b4.Te6edf3StateTb4b4b4.Te6edf3RESUMED
Tb4b4b4}

Tff7b72override Tff7b72val Te6edf3lifecycleTb4b4b4: Te6edf3Lifecycle
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3registry
Tb4b4b4}

T8b949e/**
* Desktop platform infrastructure module.
*
* Provides all platform-specific bindings that the real KMP `commonMain` implementations need:
* - Named [DataStore]<[Preferences]> instances (12 preference stores + 1 core preferences store)
* - Proto [DataStore] instances (LocalConfig, ModuleConfig, ChannelSet, LocalStats)
* - [Lifecycle] (`ProcessLifecycle`)
* - [BuildConfigProvider]
*/
Tff7b72fun Td2a8ffdesktopPlatformModuleTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3module Tb4b4b4{
T8b949e// Application-lifetime scope shared by all DataStore instances. Per the DataStore docs:
T8b949e// "The Job within this context dictates the lifecycle of the DataStore's internal operations.
T8b949e// Ensure it is an application-scoped context that is not canceled by UI lifecycle events."
T8b949e// DataStore has no close() API — the in-memory cache is released only when this Job is cancelled
T8b949e// (at process exit). Using SupervisorJob so a single store's failure doesn't cascade.
Te6edf3singleTff7b72<Te6edf3CoroutineScopeTff7b72>Tb4b4b4(Te6edf3namedTb4b4b4(Te6edf3DATASTORE_SCOPETb4b4b4)Tb4b4b4) Tb4b4b4{ Te6edf3CoroutineScopeTb4b4b4(Tff7b72getTff7b72<Te6edf3CoroutineDispatchersTff7b72>Tb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3io Tff7b72+ Te6edf3SupervisorJobTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}

Te6edf3includesTb4b4b4(Te6edf3desktopPreferencesDataStoreModuleTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3desktopProtoDataStoreModuleTb4b4b4(Tb4b4b4)Tb4b4b4)

T8b949e// -- Build config (values generated at build time by generateDesktopBuildConfig) --
Te6edf3singleTff7b72<Te6edf3BuildConfigProviderTff7b72> Tb4b4b4{
Tff7b72object Tb4b4b4: T56d364BuildConfigProvider Tb4b4b4{
Tff7b72override Tff7b72val Te6edf3isDebugTb4b4b4: Tffa657Boolean Tff7b72= Te6edf3DesktopBuildConfigTb4b4b4.Te6edf3IS_DEBUG
Tff7b72override Tff7b72val Te6edf3applicationIdTb4b4b4: Tffa657String Tff7b72= Te6edf3DesktopBuildConfigTb4b4b4.Te6edf3APPLICATION_ID
Tff7b72override Tff7b72val Te6edf3versionCodeTb4b4b4: Tffa657Int Tff7b72= Te6edf3DesktopBuildConfigTb4b4b4.Te6edf3VERSION_CODE
Tff7b72override Tff7b72val Te6edf3versionNameTb4b4b4: Tffa657String Tff7b72= Te6edf3DesktopBuildConfigTb4b4b4.Te6edf3VERSION_NAME
Tff7b72override Tff7b72val Te6edf3absoluteMinFwVersionTb4b4b4: Tffa657String Tff7b72= Te6edf3DesktopBuildConfigTb4b4b4.Te6edf3ABS_MIN_FW_VERSION
Tff7b72override Tff7b72val Te6edf3minFwVersionTb4b4b4: Tffa657String Tff7b72= Te6edf3DesktopBuildConfigTb4b4b4.Te6edf3MIN_FW_VERSION
Tb4b4b4}
Tb4b4b4}

T8b949e// -- Process Lifecycle (stays RESUMED forever on desktop) --
Te6edf3singleTb4b4b4(Te6edf3namedTb4b4b4(Ta5d6ff"Ta5d6ffProcessLifecycleTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{ Te6edf3DesktopProcessLifecycleOwnerTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3lifecycle Tb4b4b4}
Tb4b4b4}

T8b949e/** Named [DataStore]<[Preferences]> instances for all preference domains. */
Tff7b72private Tff7b72fun Td2a8ffdesktopPreferencesDataStoreModuleTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3module Tb4b4b4{
Te6edf3singleTff7b72<Te6edf3DataStoreTff7b72<Te6edf3PreferencesTff7b72>Tff7b72>Tb4b4b4(Te6edf3namedTb4b4b4(Ta5d6ff"Ta5d6ffAnalyticsDataStoreTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3createPreferencesDataStoreTb4b4b4(Ta5d6ff"Ta5d6ffanalyticsTa5d6ff"Tb4b4b4, Tff7b72getTb4b4b4(Te6edf3namedTb4b4b4(Te6edf3DATASTORE_SCOPETb4b4b4)Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3singleTff7b72<Te6edf3DataStoreTff7b72<Te6edf3PreferencesTff7b72>Tff7b72>Tb4b4b4(Te6edf3namedTb4b4b4(Ta5d6ff"Ta5d6ffHomoglyphEncodingDataStoreTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3createPreferencesDataStoreTb4b4b4(Ta5d6ff"Ta5d6ffhomoglyph_encodingTa5d6ff"Tb4b4b4, Tff7b72getTb4b4b4(Te6edf3namedTb4b4b4(Te6edf3DATASTORE_SCOPETb4b4b4)Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3singleTff7b72<Te6edf3DataStoreTff7b72<Te6edf3PreferencesTff7b72>Tff7b72>Tb4b4b4(Te6edf3namedTb4b4b4(Ta5d6ff"Ta5d6ffAppDataStoreTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3createPreferencesDataStoreTb4b4b4(Ta5d6ff"Ta5d6ffappTa5d6ff"Tb4b4b4, Tff7b72getTb4b4b4(Te6edf3namedTb4b4b4(Te6edf3DATASTORE_SCOPETb4b4b4)Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3singleTff7b72<Te6edf3DataStoreTff7b72<Te6edf3PreferencesTff7b72>Tff7b72>Tb4b4b4(Te6edf3namedTb4b4b4(Ta5d6ff"Ta5d6ffCustomEmojiDataStoreTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3createPreferencesDataStoreTb4b4b4(Ta5d6ff"Ta5d6ffcustom_emojiTa5d6ff"Tb4b4b4, Tff7b72getTb4b4b4(Te6edf3namedTb4b4b4(Te6edf3DATASTORE_SCOPETb4b4b4)Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3singleTff7b72<Te6edf3DataStoreTff7b72<Te6edf3PreferencesTff7b72>Tff7b72>Tb4b4b4(Te6edf3namedTb4b4b4(Ta5d6ff"Ta5d6ffMapDataStoreTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3createPreferencesDataStoreTb4b4b4(Ta5d6ff"Ta5d6ffmapTa5d6ff"Tb4b4b4, Tff7b72getTb4b4b4(Te6edf3namedTb4b4b4(Te6edf3DATASTORE_SCOPETb4b4b4)Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3singleTff7b72<Te6edf3DataStoreTff7b72<Te6edf3PreferencesTff7b72>Tff7b72>Tb4b4b4(Te6edf3namedTb4b4b4(Ta5d6ff"Ta5d6ffMapConsentDataStoreTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3createPreferencesDataStoreTb4b4b4(Ta5d6ff"Ta5d6ffmap_consentTa5d6ff"Tb4b4b4, Tff7b72getTb4b4b4(Te6edf3namedTb4b4b4(Te6edf3DATASTORE_SCOPETb4b4b4)Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3singleTff7b72<Te6edf3DataStoreTff7b72<Te6edf3PreferencesTff7b72>Tff7b72>Tb4b4b4(Te6edf3namedTb4b4b4(Ta5d6ff"Ta5d6ffMapTileProviderDataStoreTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3createPreferencesDataStoreTb4b4b4(Ta5d6ff"Ta5d6ffmap_tile_providerTa5d6ff"Tb4b4b4, Tff7b72getTb4b4b4(Te6edf3namedTb4b4b4(Te6edf3DATASTORE_SCOPETb4b4b4)Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3singleTff7b72<Te6edf3DataStoreTff7b72<Te6edf3PreferencesTff7b72>Tff7b72>Tb4b4b4(Te6edf3namedTb4b4b4(Ta5d6ff"Ta5d6ffMeshDataStoreTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3createPreferencesDataStoreTb4b4b4(Ta5d6ff"Ta5d6ffmeshTa5d6ff"Tb4b4b4, Tff7b72getTb4b4b4(Te6edf3namedTb4b4b4(Te6edf3DATASTORE_SCOPETb4b4b4)Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3singleTff7b72<Te6edf3DataStoreTff7b72<Te6edf3PreferencesTff7b72>Tff7b72>Tb4b4b4(Te6edf3namedTb4b4b4(Ta5d6ff"Ta5d6ffRadioDataStoreTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3createPreferencesDataStoreTb4b4b4(Ta5d6ff"Ta5d6ffradioTa5d6ff"Tb4b4b4, Tff7b72getTb4b4b4(Te6edf3namedTb4b4b4(Te6edf3DATASTORE_SCOPETb4b4b4)Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3singleTff7b72<Te6edf3DataStoreTff7b72<Te6edf3PreferencesTff7b72>Tff7b72>Tb4b4b4(Te6edf3namedTb4b4b4(Ta5d6ff"Ta5d6ffUiDataStoreTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3createPreferencesDataStoreTb4b4b4(Ta5d6ff"Ta5d6ffuiTa5d6ff"Tb4b4b4, Tff7b72getTb4b4b4(Te6edf3namedTb4b4b4(Te6edf3DATASTORE_SCOPETb4b4b4)Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3singleTff7b72<Te6edf3DataStoreTff7b72<Te6edf3PreferencesTff7b72>Tff7b72>Tb4b4b4(Te6edf3namedTb4b4b4(Ta5d6ff"Ta5d6ffMeshLogDataStoreTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3createPreferencesDataStoreTb4b4b4(Ta5d6ff"Ta5d6ffmeshlogTa5d6ff"Tb4b4b4, Tff7b72getTb4b4b4(Te6edf3namedTb4b4b4(Te6edf3DATASTORE_SCOPETb4b4b4)Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3singleTff7b72<Te6edf3DataStoreTff7b72<Te6edf3PreferencesTff7b72>Tff7b72>Tb4b4b4(Te6edf3namedTb4b4b4(Ta5d6ff"Ta5d6ffFilterDataStoreTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3createPreferencesDataStoreTb4b4b4(Ta5d6ff"Ta5d6fffilterTa5d6ff"Tb4b4b4, Tff7b72getTb4b4b4(Te6edf3namedTb4b4b4(Te6edf3DATASTORE_SCOPETb4b4b4)Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3singleTff7b72<Te6edf3DataStoreTff7b72<Te6edf3PreferencesTff7b72>Tff7b72>Tb4b4b4(Te6edf3namedTb4b4b4(Ta5d6ff"Ta5d6ffCorePreferencesDataStoreTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3createPreferencesDataStoreTb4b4b4(Ta5d6ff"Ta5d6ffcore_preferencesTa5d6ff"Tb4b4b4, Tff7b72getTb4b4b4(Te6edf3namedTb4b4b4(Te6edf3DATASTORE_SCOPETb4b4b4)Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

T8b949e/** Proto [DataStore] instances (OkioStorage-backed). */
Tff7b72private Tff7b72fun Td2a8ffdesktopProtoDataStoreModuleTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3module Tb4b4b4{
Tff7b72val Te6edf3protoDir Tff7b72= Te6edf3desktopDataDirTb4b4b4(Tb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff/datastoreTa5d6ff"

Te6edf3singleTff7b72<Te6edf3DataStoreTff7b72<Te6edf3LocalConfigTff7b72>Tff7b72>Tb4b4b4(Te6edf3namedTb4b4b4(Ta5d6ff"Ta5d6ffCoreLocalConfigDataStoreTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3DataStoreFactoryTb4b4b4.Te6edf3createTb4b4b4(
Te6edf3storage Tff7b72=
Te6edf3OkioStorageTb4b4b4(
Te6edf3fileSystem Tff7b72= Te6edf3FileSystemTb4b4b4.Te6edf3SYSTEMTb4b4b4,
Te6edf3serializer Tff7b72= Te6edf3LocalConfigSerializerTb4b4b4,
Te6edf3producePath Tff7b72= Tb4b4b4{ Ta5d6ff"Tffd700$Te6edf3protoDirTa5d6ff/local_config.pbTa5d6ff"Tb4b4b4.Te6edf3toPathTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3corruptionHandler Tff7b72= Te6edf3ReplaceFileCorruptionHandlerTb4b4b4(Te6edf3produceNewData Tff7b72= Tb4b4b4{ Te6edf3LocalConfigTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3scope Tff7b72= Tff7b72getTb4b4b4(Te6edf3namedTb4b4b4(Te6edf3DATASTORE_SCOPETb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Te6edf3singleTff7b72<Te6edf3DataStoreTff7b72<Te6edf3LocalModuleConfigTff7b72>Tff7b72>Tb4b4b4(Te6edf3namedTb4b4b4(Ta5d6ff"Ta5d6ffCoreModuleConfigDataStoreTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3DataStoreFactoryTb4b4b4.Te6edf3createTb4b4b4(
Te6edf3storage Tff7b72=
Te6edf3OkioStorageTb4b4b4(
Te6edf3fileSystem Tff7b72= Te6edf3FileSystemTb4b4b4.Te6edf3SYSTEMTb4b4b4,
Te6edf3serializer Tff7b72= Te6edf3ModuleConfigSerializerTb4b4b4,
Te6edf3producePath Tff7b72= Tb4b4b4{ Ta5d6ff"Tffd700$Te6edf3protoDirTa5d6ff/module_config.pbTa5d6ff"Tb4b4b4.Te6edf3toPathTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3corruptionHandler Tff7b72= Te6edf3ReplaceFileCorruptionHandlerTb4b4b4(Te6edf3produceNewData Tff7b72= Tb4b4b4{ Te6edf3LocalModuleConfigTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3scope Tff7b72= Tff7b72getTb4b4b4(Te6edf3namedTb4b4b4(Te6edf3DATASTORE_SCOPETb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Te6edf3singleTff7b72<Te6edf3DataStoreTff7b72<Te6edf3ChannelSetTff7b72>Tff7b72>Tb4b4b4(Te6edf3namedTb4b4b4(Ta5d6ff"Ta5d6ffCoreChannelSetDataStoreTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3DataStoreFactoryTb4b4b4.Te6edf3createTb4b4b4(
Te6edf3storage Tff7b72=
Te6edf3OkioStorageTb4b4b4(
Te6edf3fileSystem Tff7b72= Te6edf3FileSystemTb4b4b4.Te6edf3SYSTEMTb4b4b4,
Te6edf3serializer Tff7b72= Te6edf3ChannelSetSerializerTb4b4b4,
Te6edf3producePath Tff7b72= Tb4b4b4{ Ta5d6ff"Tffd700$Te6edf3protoDirTa5d6ff/channel_set.pbTa5d6ff"Tb4b4b4.Te6edf3toPathTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3corruptionHandler Tff7b72= Te6edf3ReplaceFileCorruptionHandlerTb4b4b4(Te6edf3produceNewData Tff7b72= Tb4b4b4{ Te6edf3ChannelSetTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3scope Tff7b72= Tff7b72getTb4b4b4(Te6edf3namedTb4b4b4(Te6edf3DATASTORE_SCOPETb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Te6edf3singleTff7b72<Te6edf3DataStoreTff7b72<Te6edf3LocalStatsTff7b72>Tff7b72>Tb4b4b4(Te6edf3namedTb4b4b4(Ta5d6ff"Ta5d6ffCoreLocalStatsDataStoreTa5d6ff"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3DataStoreFactoryTb4b4b4.Te6edf3createTb4b4b4(
Te6edf3storage Tff7b72=
Te6edf3OkioStorageTb4b4b4(
Te6edf3fileSystem Tff7b72= Te6edf3FileSystemTb4b4b4.Te6edf3SYSTEMTb4b4b4,
Te6edf3serializer Tff7b72= Te6edf3LocalStatsSerializerTb4b4b4,
Te6edf3producePath Tff7b72= Tb4b4b4{ Ta5d6ff"Tffd700$Te6edf3protoDirTa5d6ff/local_stats.pbTa5d6ff"Tb4b4b4.Te6edf3toPathTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Te6edf3corruptionHandler Tff7b72= Te6edf3ReplaceFileCorruptionHandlerTb4b4b4(Te6edf3produceNewData Tff7b72= Tb4b4b4{ Te6edf3LocalStatsTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)Tb4b4b4,
Te6edf3scope Tff7b72= Tff7b72getTb4b4b4(Te6edf3namedTb4b4b4(Te6edf3DATASTORE_SCOPETb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.07s